Feat/humanize interaction#2
Merged
Merged
Conversation
…eractivity, natural cadence Checkin lane: - follow-up-first question selection: a recently answered exchange is followed up (same facet_id, attribution-safe) before a new TGS topic is opened (Huang et al. 2017: follow-up questions drive liking) - prompt contract: episodic framing (concrete recent episodes, never trait/spectrum wording), share-then-ask reciprocity (Moon 2000), follow-up mode, variable question placement - ASK posture cap 2 -> 3 sentences to fit the share-then-ask shape Diegetic lane: - deterministic per-day hook flag in the gate (~35%): fragment may close with one light invitation to the subject (Liu et al. CHI 2025); base contract (no questions, not subject-addressed) unchanged otherwise - continuity rule: fragments may continue a previous open thread Proactive lane: - re-engagement must anchor to one specific dropped thread and close with a small question on it; no anchor -> [SILENT] (Skjuve et al. 2022: grounded reference, not frequency, drives perceived listening) Cadence (flag-gated RELIC_NATURAL_CADENCE, default off): - seeded skip-days for diegetic (25%) and proactive (20%); checkins never skipped (measurement instrument). Bursty, not metronomic (Barabasi 2005) - triangular two-draw window jitter for day-to-day fire-time spread (Gnewuch et al. 2018). All rolls are sha256(subject|lane|date): deterministic and replayable, no RNG state Also: natural_cadence_skip decision reason, force-path hook parity for dry runs, sandboxed dry-run harness for subject daniele (no dispatch), accent fixes in prompt strings. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The SOUL.md validator required the literal word "diegetic" while the
prompt forbids technical jargon, so valid LLM generations were silently
replaced by the template fallback, and the provisioning log still
recorded method=ollama. The fallback in turn pasted clinical stance
labels ("avoidant attachment") verbatim, which the gateway model then
performed literally: a distant, unresponsive persona.
- validation markers now match wording the prompt actually instructs
(identity anchor + assistant boundary), word-bounded forbidden checks
- SOUL prompt now carries the persona's life facts (place, work,
rhythm, passions); occupation presence is validated, so the model can
no longer drift into placeless prose or borrow the subject's own
biography
- retry loop (3 draws) before falling back; draws leaking psychology
labels are kept only as backstop; question-mark clause appended
deterministically when missing
- fallback renders attachment/intimacy as behavioral prose, gains the
presence/humor rules, and fixes slot-fill grammar
- humor responsiveness + concrete-reaction rules added to the SOUL
contract (both LLM and fallback paths)
- personalization hard-excludes avoidant/disorganized attachment for
Gumi (preference weight alone leaked them ~20% of the time)
- registry records the real generation outcome via last_soul_method
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A second-person SOUL can carry zero pronouns, so the pronoun-conform pass has nothing to rewrite and the persona's gender ends up unstated; the gateway model then defaults to feminine self-reference. Chats run in Italian, where every adjective and participle agrees, so the anchor spells out the agreement rule explicitly. - _gender_anchor(): explicit self-gender paragraph (masculine/feminine/ neutral) with Italian agreement examples - appended deterministically in generate_soul_md when missing, and always present in the fallback template - prompt now instructs stating gender plainly in the opening paragraph Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Verification
make lintpytest -qpython3 scripts/ci/check_json_jsonl.pypython3 scripts/ci/check_no_raw_private_data.pycd ui && npm audit --audit-level=moderate && npm run build:staticPrivacy Checklist